using UnityEngine;

/// <summary>
///
/// 音源接口
/// 
/// ----------------------------------------
/// 作者 hep
/// 创建时间：2023-12-19 16:01:57
/// ----------------------------------------
/// </summary>
public interface IAudioSource
{
    /// <summary>
    /// 是否使用中
    /// </summary>
    /// <value></value>
    public bool IsUse { get; }


    /// <summary>
    /// 初始化
    /// </summary>
    /// <param name="_audioSource"></param>
    void Awake(AudioSource _audioSource);

    /// <summary>
    /// 帧更新
    /// </summary>
    void Update();

    /// <summary>
    /// 释放
    /// </summary>
    void Dispose();

    /// <summary>
    /// 回收
    /// </summary>
    void Recycle();

    /// <summary>
    /// 播放
    /// </summary>
    void Play();

    /// <summary>
    /// 播放（当前音量到指定值）
    /// </summary>
    /// <param name="_end">结束渐变的值</param>
    /// <param name="_time">时间（s）</param>
    void Play(float _end, float _time);

    /// <summary>
    /// 播放（指定音量起始和结束位置）
    /// </summary>
    /// <param name="_start">开始渐变的值</param>
    /// <param name="_end">结束渐变的值</param>
    /// <param name="_time">时间（s）</param>
    void Play(float _start, float _end, float _time);

    /// <summary>
    ///  播放（指定声音片段）
    /// </summary>
    /// <param name="_audioClip">声音片段</param>
    void Play(AudioClip _audioClip);

    /// <summary>
    /// 播放（指定声音片段）（当前音量到指定值）
    /// </summary>
    /// <param name="_audioClip">声音片段</param>
    /// <param name="_end">结束渐变的值</param>
    /// <param name="_time">时间（s）</param>
    void Play(AudioClip _audioClip, float _end, float _time);

    /// <summary>
    /// 播放（指定声音片段）（指定音量起始和结束位置）
    /// </summary>
    /// <param name="_audioClip">声音片段</param>
    /// <param name="_start">开始渐变的值</param>
    /// <param name="_end">结束渐变的值</param>
    /// <param name="_time">时间（s）</param>
    void Play(AudioClip _audioClip, float _start, float _end, float _time);


    /// <summary>
    /// 播放（不替代模式）
    /// </summary>
    void PlayOneShot();

    /// <summary>
    /// 播放（不替代模式）（当前音量到指定值）
    /// </summary>
    /// <param name="_end">结束渐变的值</param>
    /// <param name="_time">时间（s）</param>
    void PlayOneShot(float _end, float _time);

    /// <summary>
    /// 播放（不替代模式）（指定音量起始和结束位置）
    /// </summary>
    /// <param name="_start">开始渐变的值</param>
    /// <param name="_end">结束渐变的值</param>
    /// <param name="_time">时间（s）</param>
    void PlayOneShot(float _start, float _end, float _time);

    /// <summary>
    ///  播放（不替代模式）（指定声音片段）
    /// </summary>
    /// <param name="_audioClip">声音片段</param>
    void PlayOneShot(AudioClip _audioClip);

    /// <summary>
    /// 播放（不替代模式）（指定声音片段）（当前音量到指定值）
    /// </summary>
    /// <param name="_audioClip">声音片段</param>
    /// <param name="_end">结束渐变的值</param>
    /// <param name="_time">时间（s）</param>
    void PlayOneShot(AudioClip _audioClip, float _end, float _time);

    /// <summary>
    /// 播放（不替代模式）（指定声音片段）（指定音量起始和结束位置）
    /// </summary>
    /// <param name="_audioClip">声音片段</param>
    /// <param name="_start">开始渐变的值</param>
    /// <param name="_end">结束渐变的值</param>
    /// <param name="_time">时间（s）</param>
    void PlayOneShot(AudioClip _audioClip, float _start, float _end, float _time);


    /// <summary>
    /// 停止播放
    /// </summary>
    void Stop();

    /// <summary>
    /// 暂停播放
    /// </summary>
    void Pause();

    /// <summary>
    /// 静音
    /// </summary>
    /// <param name="_isMute">是否静音</param>
    void Mute(bool _isMute);

    /// <summary>
    /// 循环
    /// </summary>
    /// <param name="_isLoop">是否循环</param>
    void Loop(bool _isLoop);

    /// <summary>
    /// 音量
    /// </summary>
    /// <param name="_value"></param>
    void Volume(float _value);

    /// <summary>
    /// 使用
    /// </summary>
    /// <param name="_value"></param>
    void Use(bool _value);
}